# -*- coding: utf-8 -*-
class IPosicionable(object):
	
	"""
	Interfaz que es implementada por todos los objetos que pueden cambiar de posicion durante la ejecucion de un problema.
	@since: 4/14/2011
	@version: 1.0
	"""
	
	_x = 0
	""" Abscisa """
	
	_y = 0
	""" Ordenada """
	
	def __init__(self):
		"""
		Constructor
		@type	self: IPosicionalble
		@param	self: referencia al IPosicionable actual
		"""
		pass

	def getX(self):
		"""
		Metodo para obtener la Abscisa
		@type	self: IPosicionalble
		@param	self: referencia al IPosicionable actual
		"""
		return self._x

	def getY(self):
		"""
		Metodo para obtener la Ordenada
		@type	self: IPosicionalble
		@param	self: referencia al IPosicionable actual
		"""
		return self._y

	def setX(self, x):
		"""
		Metodo para establecer la Abscisa
		@type	self: IPosicionalble
		@param	self: referencia al IPosicionable actual
		
		@type	x: int
		@param	x: valor de la Abscisa
		"""
		self._x=x

	def setY(self, y):
		"""
		Metodo para establecer la Ordenada
		@type	self: IPosicionalble
		@param	self: referencia al IPosicionable actual
		
		@type	y: int
		@param	y: valor de la Ordenada
		"""
		self._y=y

	def setPosicion(self, posicion):
		"""
		Metodo para establecer el par (Abscisa, Ordenada)
		@type	self: IPosicionalble
		@param	self: referencia al IPosicionable actual
		
		@type	posicion: list
		@param	posicion: par ordenado (Abcisa, Ordenada)
		"""
		if(isinstance(posicion, list)):
			self._x=posicion[0]
			self._y=posicion[1]
		else:
			self._x=posicion
		
		try:
			self.actualizarPosiciones()
		except:
			pass
		
		
	def getPosicion(self):
		"""
		Metodo para Obtener el par (Abscisa, Ordenada) en forma de list
		@type	self: IPosicionalble
		@param	self: referencia al IPosicionable actual
		"""
		return [self._x, self._y]
	
	def compararPosicion(self, posicion):	
		if(self._x<posicion[0]-40 or self._x>posicion[0]+40 or self._y<posicion[1]-40 or self._y>posicion[1]+40):
			return False
		
		return True
			
